diff --git a/user_guide_src/source/libraries/email.rst b/user_guide_src/source/libraries/email.rst
index 6dd5463..7598992 100644
--- a/user_guide_src/source/libraries/email.rst
+++ b/user_guide_src/source/libraries/email.rst
@@ -80,86 +80,32 @@
 The following is a list of all the preferences that can be set when
 sending email.
 
-Preference
-Default Value
-Options
-Description
-**useragent**
-CodeIgniter
-None
-The "user agent".
-**protocol**
-mail
-mail, sendmail, or smtp
-The mail sending protocol.
-**mailpath**
-/usr/sbin/sendmail
-None
-The server path to Sendmail.
-**smtp_host**
-No Default
-None
-SMTP Server Address.
-**smtp_user**
-No Default
-None
-SMTP Username.
-**smtp_pass**
-No Default
-None
-SMTP Password.
-**smtp_port**
-25
-None
-SMTP Port.
-**smtp_timeout**
-5
-None
-SMTP Timeout (in seconds).
-**smtp_crypto**
-No Default
-tls or ssl
-SMTP Encryption
-**wordwrap**
-TRUE
-TRUE or FALSE (boolean)
-Enable word-wrap.
-**wrapchars**
-76
-Character count to wrap at.
-**mailtype**
-text
-text or html
-Type of mail. If you send HTML email you must send it as a complete web
-page. Make sure you don't have any relative links or relative image
-paths otherwise they will not work.
-**charset**
-utf-8
-Character set (utf-8, iso-8859-1, etc.).
-**validate**
-FALSE
-TRUE or FALSE (boolean)
-Whether to validate the email address.
-**priority**
-3
-1, 2, 3, 4, 5
-Email Priority. 1 = highest. 5 = lowest. 3 = normal.
-**crlf**
-\\n
-"\\r\\n" or "\\n" or "\\r"
-Newline character. (Use "\\r\\n" to comply with RFC 822).
-**newline**
-\\n
-"\\r\\n" or "\\n" or "\\r"
-Newline character. (Use "\\r\\n" to comply with RFC 822).
-**bcc_batch_mode**
-FALSE
-TRUE or FALSE (boolean)
-Enable BCC Batch Mode.
-**bcc_batch_size**
-200
-None
-Number of emails in each BCC batch.
+=================== ====================== ============================ =======================================================================
+Preference          Default Value          Options                      Description
+=================== ====================== ============================ =======================================================================
+**useragent**       CodeIgniter            None                         The "user agent".
+**protocol**        mail                   mail, sendmail, or smtp      The mail sending protocol.
+**mailpath**        /usr/sbin/sendmail     None                         The server path to Sendmail. 
+**smtp_host**       No Default             None                         SMTP Server Address.
+**smtp_user**       No Default             None                         SMTP Username.
+**smtp_pass**       No Default             None                         SMTP Password.
+**smtp_port**       25                     None                         SMTP Port.
+**smtp_timeout**    5                      None                         SMTP Timeout (in seconds).
+**smtp_crypto**     No Default             tls or ssl                   SMTP Encryption
+**wordwrap**        TRUE                   TRUE or FALSE (boolean)      Enable word-wrap.
+**wrapchars**       76                                                  Character count to wrap at.
+**mailtype**        text                   text or html                 Type of mail. If you send HTML email you must send it as a complete web
+                                                                        page. Make sure you don't have any relative links or relative image
+                                                                        paths otherwise they will not work.
+**charset**         utf-8                                               Character set (utf-8, iso-8859-1, etc.).
+**validate**        FALSE                  TRUE or FALSE (boolean)      Whether to validate the email address.
+**priority**        3                      1, 2, 3, 4, 5                Email Priority. 1 = highest. 5 = lowest. 3 = normal.
+**crlf**            \\n                    "\\r\\n" or "\\n" or "\\r"   Newline character. (Use "\\r\\n" to comply with RFC 822).
+**newline**         \\n                    "\\r\\n" or "\\n" or "\\r"   Newline character. (Use "\\r\\n" to comply with RFC 822).
+**bcc_batch_mode**  FALSE                  TRUE or FALSE (boolean)      Enable BCC Batch Mode.
+**bcc_batch_size**  200                    None                         Number of emails in each BCC batch.
+=================== ====================== ============================ =======================================================================
+
 Email Function Reference
 ========================
 
diff --git a/user_guide_src/source/libraries/file_uploading.rst b/user_guide_src/source/libraries/file_uploading.rst
index 51dd0d5..90efca9 100644
--- a/user_guide_src/source/libraries/file_uploading.rst
+++ b/user_guide_src/source/libraries/file_uploading.rst
@@ -187,69 +187,35 @@
 The following preferences are available. The default value indicates
 what will be used if you do not specify that preference.
 
-Preference
-Default Value
-Options
-Description
-**upload_path**
-None
-None
-The path to the folder where the upload should be placed. The folder
-must be writable and the path can be absolute or relative.
-**allowed_types**
-None
-None
-The mime types corresponding to the types of files you allow to be
-uploaded. Usually the file extension can be used as the mime type.
-Separate multiple types with a pipe.
-**file_name**
-None
-Desired file name
-If set CodeIgniter will rename the uploaded file to this name. The
-extension provided in the file name must also be an allowed file type.
-
-**overwrite**
-FALSE
-TRUE/FALSE (boolean)
-If set to true, if a file with the same name as the one you are
-uploading exists, it will be overwritten. If set to false, a number will
-be appended to the filename if another with the same name exists.
-**max_size**
-0
-None
-The maximum size (in kilobytes) that the file can be. Set to zero for no
-limit. Note: Most PHP installations have their own limit, as specified
-in the php.ini file. Usually 2 MB (or 2048 KB) by default.
-**max_width**
-0
-None
-The maximum width (in pixels) that the file can be. Set to zero for no
-limit.
-**max_height**
-0
-None
-The maximum height (in pixels) that the file can be. Set to zero for no
-limit.
-**max_filename**
-0
-None
-The maximum length that a file name can be. Set to zero for no limit.
-**max_filename_increment**
-100
-None
-When overwrite is set to FALSE, use this to set the maximum filename
-increment for CodeIgniter to append to the filename.
-**encrypt_name**
-FALSE
-TRUE/FALSE (boolean)
-If set to TRUE the file name will be converted to a random encrypted
-string. This can be useful if you would like the file saved with a name
-that can not be discerned by the person uploading it.
-**remove_spaces**
-TRUE
-TRUE/FALSE (boolean)
-If set to TRUE, any spaces in the file name will be converted to
-underscores. This is recommended.
+============================ ================= ======================= ======================================================================
+Preference                   Default Value     Options                 Description
+============================ ================= ======================= ======================================================================
+**upload_path**              None              None                    The path to the folder where the upload should be placed. The folder
+                                                                       must be writable and the path can be absolute or relative.
+**allowed_types**            None              None                    The mime types corresponding to the types of files you allow to be
+                                                                       uploaded. Usually the file extension can be used as the mime type.
+                                                                       Separate multiple types with a pipe.
+**file_name**                None              Desired file name       If set CodeIgniter will rename the uploaded file to this name. The
+                                                                       extension provided in the file name must also be an allowed file type.
+**overwrite**                FALSE             TRUE/FALSE (boolean)    If set to true, if a file with the same name as the one you are
+                                                                       uploading exists, it will be overwritten. If set to false, a number will
+                                                                       be appended to the filename if another with the same name exists.
+**max_size**                 0                 None                    The maximum size (in kilobytes) that the file can be. Set to zero for no
+                                                                       limit. Note: Most PHP installations have their own limit, as specified
+                                                                       in the php.ini file. Usually 2 MB (or 2048 KB) by default.
+**max_width**                0                 None                    The maximum width (in pixels) that the file can be. Set to zero for no
+                                                                       limit.
+**max_height**               0                 None                    The maximum height (in pixels) that the file can be. Set to zero for no
+                                                                       limit.
+**max_filename**             0                 None                    The maximum length that a file name can be. Set to zero for no limit.
+**max_filename_increment**   100               None                    When overwrite is set to FALSE, use this to set the maximum filename
+                                                                       increment for CodeIgniter to append to the filename.
+**encrypt_name**             FALSE             TRUE/FALSE (boolean)    If set to TRUE the file name will be converted to a random encrypted
+                                                                       string. This can be useful if you would like the file saved with a name
+                                                                       that can not be discerned by the person uploading it.
+**remove_spaces**            TRUE              TRUE/FALSE (boolean)    If set to TRUE, any spaces in the file name will be converted to
+                                                                       underscores. This is recommended.
+============================ ================= ======================= ======================================================================
 
 Setting preferences in a config file
 ====================================
diff --git a/user_guide_src/source/libraries/image_lib.rst b/user_guide_src/source/libraries/image_lib.rst
index 8ded4df..300cbef 100644
--- a/user_guide_src/source/libraries/image_lib.rst
+++ b/user_guide_src/source/libraries/image_lib.rst
@@ -116,106 +116,46 @@
 -  X - Image Rotation
 -  W - Image Watermarking
 
-Preference
-Default Value
-Options
-Description
-Availability
-**image_library**
-GD2
-GD, GD2, ImageMagick, NetPBM
-Sets the image library to be used.
-R, C, X, W
-**library_path**
-None
-None
-Sets the server path to your ImageMagick or NetPBM library. If you use
-either of those libraries you must supply the path.
-R, C, X
-**source_image**
-None
-None
-Sets the source image name/path. The path must be a relative or absolute
-server path, not a URL.
-R, C, S, W
-**dynamic_output**
-FALSE
-TRUE/FALSE (boolean)
-Determines whether the new image file should be written to disk or
-generated dynamically. Note: If you choose the dynamic setting, only one
-image can be shown at a time, and it can't be positioned on the page. It
-simply outputs the raw image dynamically to your browser, along with
-image headers.
-R, C, X, W
-**quality**
-90%
-1 - 100%
-Sets the quality of the image. The higher the quality the larger the
-file size.
-R, C, X, W
-**new_image**
-None
-None
-Sets the destination image name/path. You'll use this preference when
-creating an image copy. The path must be a relative or absolute server
-path, not a URL.
-R, C, X, W
-**width**
-None
-None
-Sets the width you would like the image set to.
-R, C
-**height**
-None
-None
-Sets the height you would like the image set to.
-R, C
-**create_thumb**
-FALSE
-TRUE/FALSE (boolean)
-Tells the image processing function to create a thumb.
-R
-**thumb_marker**
-_thumb
-None
-Specifies the thumbnail indicator. It will be inserted just before the
-file extension, so mypic.jpg would become mypic_thumb.jpg
-R
-**maintain_ratio**
-TRUE
-TRUE/FALSE (boolean)
-Specifies whether to maintain the original aspect ratio when resizing or
-use hard values.
-R, C
-**master_dim**
-auto
-auto, width, height
-Specifies what to use as the master axis when resizing or creating
-thumbs. For example, let's say you want to resize an image to 100 X 75
-pixels. If the source image size does not allow perfect resizing to
-those dimensions, this setting determines which axis should be used as
-the hard value. "auto" sets the axis automatically based on whether the
-image is taller then wider, or vice versa.
-R
-**rotation_angle**
-None
-90, 180, 270, vrt, hor
-Specifies the angle of rotation when rotating images. Note that PHP
-rotates counter-clockwise, so a 90 degree rotation to the right must be
-specified as 270.
-X
-**x_axis**
-None
-None
-Sets the X coordinate in pixels for image cropping. For example, a
-setting of 30 will crop an image 30 pixels from the left.
-C
-**y_axis**
-None
-None
-Sets the Y coordinate in pixels for image cropping. For example, a
-setting of 30 will crop an image 30 pixels from the top.
-C
+======================= ======================= =============================== =========================================================================== =============
+Preference              Default Value           Options                         Description                                                                 Availability
+======================= ======================= =============================== =========================================================================== =============
+**image_library**       GD2                     GD, GD2, ImageMagick, NetPBM    Sets the image library to be used.                                          R, C, X, W
+**library_path**        None                    None                            Sets the server path to your ImageMagick or NetPBM library. If you use      R, C, X
+                                                                                either of those libraries you must supply the path.                         R, C, S, W
+**source_image**        None                    None                            Sets the source image name/path. The path must be a relative or absolute
+                                                                                server path, not a URL.
+**dynamic_output**      FALSE                   TRUE/FALSE (boolean)            Determines whether the new image file should be written to disk or          R, C, X, W
+                                                                                generated dynamically. Note: If you choose the dynamic setting, only one
+                                                                                image can be shown at a time, and it can't be positioned on the page. It
+                                                                                simply outputs the raw image dynamically to your browser, along with
+                                                                                image headers.
+**quality**             90%                     1 - 100%                        Sets the quality of the image. The higher the quality the larger the        R, C, X, W
+                                                                                file size.
+**new_image**           None                    None                            Sets the destination image name/path. You'll use this preference when       R, C, X, W
+                                                                                creating an image copy. The path must be a relative or absolute server
+                                                                                path, not a URL.
+**width**               None                    None                            Sets the width you would like the image set to.                             R, C
+**height**              None                    None                            Sets the height you would like the image set to.                            R, C
+**create_thumb**        FALSE                   TRUE/FALSE (boolean)            Tells the image processing function to create a thumb.                      R
+**thumb_marker**        _thumb                  None                            Specifies the thumbnail indicator. It will be inserted just before the      R
+                                                                                file extension, so mypic.jpg would become mypic_thumb.jpg
+**maintain_ratio**      TRUE                    TRUE/FALSE (boolean)            Specifies whether to maintain the original aspect ratio when resizing or    R, C
+                                                                                use hard values.
+**master_dim**          auto                    auto, width, height             Specifies what to use as the master axis when resizing or creating          R
+                                                                                thumbs. For example, let's say you want to resize an image to 100 X 75
+                                                                                pixels. If the source image size does not allow perfect resizing to
+                                                                                those dimensions, this setting determines which axis should be used as
+                                                                                the hard value. "auto" sets the axis automatically based on whether the
+                                                                                image is taller then wider, or vice versa.
+**rotation_angle**      None                    90, 180, 270, vrt, hor          Specifies the angle of rotation when rotating images. Note that PHP         X
+                                                                                rotates counter-clockwise, so a 90 degree rotation to the right must be
+                                                                                specified as 270.
+**x_axis**              None                    None                            Sets the X coordinate in pixels for image cropping. For example, a          C
+                                                                                setting of 30 will crop an image 30 pixels from the left.
+**y_axis**              None                    None                            Sets the Y coordinate in pixels for image cropping. For example, a          C
+                                                                                setting of 30 will crop an image 30 pixels from the top.
+======================= ======================= =============================== =========================================================================== =============
+
 Setting preferences in a config file
 ====================================
 
@@ -407,137 +347,82 @@
 This table shown the preferences that are available for both types of
 watermarking (text or overlay)
 
-Preference
-Default Value
-Options
-Description
-**wm_type**
-text
-text, overlay
-Sets the type of watermarking that should be used.
-**source_image**
-None
-None
-Sets the source image name/path. The path must be a relative or absolute
-server path, not a URL.
-**dynamic_output**
-FALSE
-TRUE/FALSE (boolean)
-Determines whether the new image file should be written to disk or
-generated dynamically. Note: If you choose the dynamic setting, only one
-image can be shown at a time, and it can't be positioned on the page. It
-simply outputs the raw image dynamically to your browser, along with
-image headers.
-**quality**
-90%
-1 - 100%
-Sets the quality of the image. The higher the quality the larger the
-file size.
-**padding**
-None
-A number
-The amount of padding, set in pixels, that will be applied to the
-watermark to set it away from the edge of your images.
-**wm_vrt_alignment**
-bottom
-top, middle, bottom
-Sets the vertical alignment for the watermark image.
-**wm_hor_alignment**
-center
-left, center, right
-Sets the horizontal alignment for the watermark image.
-**wm_hor_offset**
-None
-None
-You may specify a horizontal offset (in pixels) to apply to the
-watermark position. The offset normally moves the watermark to the
-right, except if you have your alignment set to "right" then your offset
-value will move the watermark toward the left of the image.
-**wm_vrt_offset**
-None
-None
-You may specify a vertical offset (in pixels) to apply to the watermark
-position. The offset normally moves the watermark down, except if you
-have your alignment set to "bottom" then your offset value will move the
-watermark toward the top of the image.
+======================= =================== ======================= ==========================================================================
+Preference              Default Value       Options                 Description
+======================= =================== ======================= ==========================================================================
+**wm_type**             text                text, overlay           Sets the type of watermarking that should be used.
+**source_image**        None                None                    Sets the source image name/path. The path must be a relative or absolute
+                                                                    server path, not a URL.
+**dynamic_output**      FALSE               TRUE/FALSE (boolean)    Determines whether the new image file should be written to disk or
+                                                                    generated dynamically. Note: If you choose the dynamic setting, only one
+                                                                    image can be shown at a time, and it can't be positioned on the page. It
+                                                                    simply outputs the raw image dynamically to your browser, along with
+                                                                    image headers.
+**quality**             90%                 1 - 100%                Sets the quality of the image. The higher the quality the larger the
+                                                                    file size.
+**padding**             None                A number                The amount of padding, set in pixels, that will be applied to the
+                                                                    watermark to set it away from the edge of your images.
+**wm_vrt_alignment**    bottom              top, middle, bottom     Sets the vertical alignment for the watermark image.
+**wm_hor_alignment**    center              left, center, right     Sets the horizontal alignment for the watermark image.
+**wm_hor_offset**       None                None                    You may specify a horizontal offset (in pixels) to apply to the
+                                                                    watermark position. The offset normally moves the watermark to the
+                                                                    right, except if you have your alignment set to "right" then your offset
+                                                                    value will move the watermark toward the left of the image.
+**wm_vrt_offset**       None                None                    You may specify a vertical offset (in pixels) to apply to the watermark
+                                                                    position. The offset normally moves the watermark down, except if you
+                                                                    have your alignment set to "bottom" then your offset value will move the
+                                                                    watermark toward the top of the image.
+======================= =================== ======================= ==========================================================================
+
 Text Preferences
 ----------------
 
 This table shown the preferences that are available for the text type of
 watermarking.
 
-Preference
-Default Value
-Options
-Description
-**wm_text**
-None
-None
-The text you would like shown as the watermark. Typically this will be a
-copyright notice.
-**wm_font_path**
-None
-None
-The server path to the True Type Font you would like to use. If you do
-not use this option, the native GD font will be used.
-**wm_font_size**
-16
-None
-The size of the text. Note: If you are not using the True Type option
-above, the number is set using a range of 1 - 5. Otherwise, you can use
-any valid pixel size for the font you're using.
-**wm_font_color**
-ffffff
-None
-The font color, specified in hex. Note, you must use the full 6
-character hex value (ie, 993300), rather than the three character
-abbreviated version (ie fff).
-**wm_shadow_color**
-None
-None
-The color of the drop shadow, specified in hex. If you leave this blank
-a drop shadow will not be used. Note, you must use the full 6 character
-hex value (ie, 993300), rather than the three character abbreviated
-version (ie fff).
-**wm_shadow_distance**
-3
-None
-The distance (in pixels) from the font that the drop shadow should
-appear.
+======================= =================== =================== ==========================================================================
+Preference              Default Value       Options             Description
+======================= =================== =================== ==========================================================================
+**wm_text**             None                None                The text you would like shown as the watermark. Typically this will be a
+                                                                copyright notice.
+**wm_font_path**        None                None                The server path to the True Type Font you would like to use. If you do
+                                                                not use this option, the native GD font will be used.
+**wm_font_size**        16                  None                The size of the text. Note: If you are not using the True Type option
+                                                                above, the number is set using a range of 1 - 5. Otherwise, you can use
+                                                                any valid pixel size for the font you're using.
+**wm_font_color**       ffffff              None                The font color, specified in hex. Note, you must use the full 6
+                                                                character hex value (ie, 993300), rather than the three character
+                                                                abbreviated version (ie fff).
+**wm_shadow_color**     None                None                The color of the drop shadow, specified in hex. If you leave this blank
+                                                                a drop shadow will not be used. Note, you must use the full 6 character
+                                                                hex value (ie, 993300), rather than the three character abbreviated
+                                                                version (ie fff).
+**wm_shadow_distance**  3                   None                The distance (in pixels) from the font that the drop shadow should
+                                                                appear.
+======================= =================== =================== ==========================================================================
+
 Overlay Preferences
 -------------------
 
 This table shown the preferences that are available for the overlay type
 of watermarking.
 
-Preference
-Default Value
-Options
-Description
-**wm_overlay_path**
-None
-None
-The server path to the image you wish to use as your watermark. Required
-only if you are using the overlay method.
-**wm_opacity**
-50
-1 - 100
-Image opacity. You may specify the opacity (i.e. transparency) of your
-watermark image. This allows the watermark to be faint and not
-completely obscure the details from the original image behind it. A 50%
-opacity is typical.
-**wm_x_transp**
-4
-A number
-If your watermark image is a PNG or GIF image, you may specify a color
-on the image to be "transparent". This setting (along with the next)
-will allow you to specify that color. This works by specifying the "X"
-and "Y" coordinate pixel (measured from the upper left) within the image
-that corresponds to a pixel representative of the color you want to be
-transparent.
-**wm_y_transp**
-4
-A number
-Along with the previous setting, this allows you to specify the
-coordinate to a pixel representative of the color you want to be
-transparent.
+======================= =================== =================== ==========================================================================
+Preference              Default Value       Options             Description
+======================= =================== =================== ==========================================================================
+**wm_overlay_path**     None                None                The server path to the image you wish to use as your watermark. Required
+                                                                only if you are using the overlay method.
+**wm_opacity**          50                  1 - 100             Image opacity. You may specify the opacity (i.e. transparency) of your
+                                                                watermark image. This allows the watermark to be faint and not
+                                                                completely obscure the details from the original image behind it. A 50%
+                                                                opacity is typical.
+**wm_x_transp**         4                   A number            If your watermark image is a PNG or GIF image, you may specify a color
+                                                                on the image to be "transparent". This setting (along with the next)
+                                                                will allow you to specify that color. This works by specifying the "X"
+                                                                and "Y" coordinate pixel (measured from the upper left) within the image
+                                                                that corresponds to a pixel representative of the color you want to be
+                                                                transparent.
+**wm_y_transp**         4                   A number            Along with the previous setting, this allows you to specify the
+                                                                coordinate to a pixel representative of the color you want to be
+                                                                transparent.
+======================= =================== =================== ==========================================================================
